-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ajout d'une fn de surpression de dimensions #14
Conversation
|
||
def test_remove_dimension(): | ||
|
||
ini_las = "test/data/4_6.las" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ça vaut peut-être le coup de tester avec des extra_dims qui ne sont pas supprimées en plus de ce test-là (pour être sûrs que ça supprime pas toutes les extra_dims d'unef façon ou d'une autre
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bien vu, je rajoute un test
@@ -83,6 +87,40 @@ def keep_non_planar_pts(pipeline, condition, condition_out): | |||
return pipeline | |||
|
|||
|
|||
def remove_dimensions(input_las, dimensions, ouput_las): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pas sûre que ça a sa place dans le même fichier que les macros, parce que tu fais un pipeline à part ici
Potentiellement ça pourrait même aller dans ign-pdal-tools parce que je pense que ce ne sera pas utilisé que dans le contexte du plugin
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oui je suis d'accord avec toi, le mettre dans ign-pdal-tools serait plus judicieux. Je peux le faire. Mais il faut que l'on soit sur du concept en amont.
@@ -0,0 +1,38 @@ | |||
import tempfile |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tu peux mettre ce test dans test/pdal_ign_macro/test_macro.py stp ? (comme ça on a la même arborescence entre code et test, ce sera plus pratique quand on aura plus de code)
C'est valable que si la fonction testée reste là où elle est (à adapter sinon)
pipeline.execute() | ||
points = pipeline.arrays[0] | ||
|
||
dim_remove = [] | ||
for dim in dimensions: | ||
dim_remove.append(list(points.dtype.fields.keys()).index(dim)) | ||
|
||
new_points = [] | ||
for pt in points: | ||
ptl = list(pt) | ||
ptl = [ptl[i] for i in range(len(ptl)) if i not in dim_remove] | ||
new_points.append(tuple(ptl)) | ||
|
||
new_dtype = {} | ||
for dim in points.dtype.fields.keys(): | ||
if dim in dimensions: | ||
continue | ||
new_dtype[dim] = points.dtype.fields[dim] | ||
|
||
new_las = numpy.array(new_points, dtype=new_dtype) | ||
params = li.get_writer_parameters_from_reader_metadata(pipeline.metadata) | ||
|
||
pipeline_end = pdal.Pipeline(arrays=[new_las], ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ca peut se simplifier en utilisant numpy :
pipeline.execute() | |
points = pipeline.arrays[0] | |
dim_remove = [] | |
for dim in dimensions: | |
dim_remove.append(list(points.dtype.fields.keys()).index(dim)) | |
new_points = [] | |
for pt in points: | |
ptl = list(pt) | |
ptl = [ptl[i] for i in range(len(ptl)) if i not in dim_remove] | |
new_points.append(tuple(ptl)) | |
new_dtype = {} | |
for dim in points.dtype.fields.keys(): | |
if dim in dimensions: | |
continue | |
new_dtype[dim] = points.dtype.fields[dim] | |
new_las = numpy.array(new_points, dtype=new_dtype) | |
params = li.get_writer_parameters_from_reader_metadata(pipeline.metadata) | |
pipeline_end = pdal.Pipeline(arrays=[new_las], ) | |
pipeline.execute() | |
points = pipeline.arrays[0] | |
input_dimensions = list(points.dtype.fields.keys()) | |
output_dimensions = [dim for dim in input_dimensions if dim not in dimensions] | |
points_pruned = points[output_dimensions] | |
params = li.get_writer_parameters_from_reader_metadata(pipeline.metadata) | |
pipeline_end = pdal.Pipeline( | |
arrays=[points_pruned], | |
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vu comme ça... il faut tout de même ajouter le dtype au tableau.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pour moi c'est numpy qui s'en occupe tout seul, parce que la donnée est une structured array https://numpy.org/doc/stable/user/basics.rec.html , mais si t'as un doute ça vaut le coup de vérifier
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oui tu as raison. Je me suis vraiment complexifié la vie !! il va falloir que tu me donnes des cours de numpy
No description provided.